<?php
namespace Lite\Sql\Mysql;

class MysqlConnection implements Connection {

	private $mysql;

	/**
	 * Abre una conexion con el servidor 
	 */
	function open($addr, $user, $auth, $attr = null){
		if(!function_exists('mysql_connect')) {
			throw new \RuntimeException('Mysql extension is not available');
		}
		$this->mysql = mysql_connect($addr, $user, $auth, $attr);
		
		return is_resource($this->mysql);
	}

	/**
	 * Checkea el estado de conexion
	 *
	 * @return boolean
	 */
	function ping(){
		return mysql_ping($this->mysql);
	}

	/**
	 * Cierra la conexion actual
	 * 
	 * @return boolean
	 */
	function close(){
		return mysql_close($this->mysql);
	}

	/**
	 * Selecciona una base de datos para utilizar
	 * 
	 * @param string $name nombre de la base de datos a utilizar
	 * @return boolean
	 */
	function selectDb($name){
		return mysql_select_db($name, $this->mysql);
	}

	/**
	 * Ejecuta una consulta SQL utilizando la conexion actual 
	 *
	 * @param string $sql
	 * 
	 * @return mixed
	 * 
	 * @throws Sql_Exception
	 */
	function execute($sql){
		if(false === ($result = mysql_query($sql, $this->mysql))) {
			throw new SqlException($this->getError(), $this->getErrorCode());
		}
		
		if(is_resource($result)) {
			$result = new MysqlResultSet($result);
		}
		
		return $result;
	}

	/**
	 * Devuelve la cantidad de filas afectadas por la ultima consulta SQL
	 * ejecutada
	 * 
	 * @return int
	 */
	function affectedRows(){
		return mysql_num_rows($this->mysql);
	}

	/**
	 * Devuelve el ID generado por la ultima consulta INSERT o <code>null</code>
	 * 
	 * @return integer
	 */
	function insertId(){
		return mysql_insert_id($this->mysql);
	}

	/**
	 * Devuelve el ultimo error
	 * 
	 * @return int
	 */
	function getErrorCode(){
		return mysql_errno($this->mysql);
	}

	/**
	 * Devuelve el ultimo error
	 * 
	 * @return string
	 */
	function getError(){
		return mysql_error($this->mysql);
	}
}
